/*
 * ap1508.h
 */

#ifndef __AP1508_H__
#define __AP1508_H__

#define INST_ADDR_BASE            0x00000000
#define DATA_ADDR_BASE            0x20000000
#define SREG_ADDR_BASE            0x40000000

// Instruction Area
#define FLASH0_ADDR_BASE          (INST_ADDR_BASE + 0x00000000)
#define FLASH1_ADDR_BASE          (INST_ADDR_BASE + 0x01000000)
#define DSP_REMAP_ADDR_BASE       (INST_ADDR_BASE + 0x04000000)
// Data Area
#define SRAM0_ADDR_BASE           (DATA_ADDR_BASE + 0x00000000)
#define SRAM1_ADDR_BASE           (DATA_ADDR_BASE + 0x01000000)
#define SRAM2_ADDR_BASE           (DATA_ADDR_BASE + 0x02000000)
#define DSP_ADDR_BASE             (DATA_ADDR_BASE + 0x03000000)
// System REG
#define APER_ADDR_BASE            (SREG_ADDR_BASE + 0x00000000)
#define SPER_ADDR_BASE            (SREG_ADDR_BASE + 0x01000000)
#define SCFG_ADDR_BASE            (SREG_ADDR_BASE + 0x02000000)
#define PCFG_ADDR_BASE            (SREG_ADDR_BASE + 0x03000000)

// SPER_ADDR_BASE
#define SPER_APB1_ADDR_BASE       (SPER_ADDR_BASE + 0x00000000)
#define SPER_APB2_ADDR_BASE       (SPER_ADDR_BASE + 0x00800000)

// SPER_APB1_ADDR_BASE
// SPER_APB0_ADDR_BASE                                                 
#define SPER_APB1_UARTHS_BASE     (SPER_APB1_ADDR_BASE + 0x00000000)
#define SPER_APB1_UART2_BASE      (SPER_APB1_ADDR_BASE + 0x00010000)
#define SPER_APB1_UART3_BASE      (SPER_APB1_ADDR_BASE + 0x00020000)
#define SPER_APB1_UART4_BASE      (SPER_APB1_ADDR_BASE + 0x00030000)
#define SPER_APB1_SPI0_BASE       (SPER_APB1_ADDR_BASE + 0x00040000)
#define SPER_APB1_I2C1_BASE       (SPER_APB1_ADDR_BASE + 0x00050000)
#define SPER_APB1_I2C2_BASE       (SPER_APB1_ADDR_BASE + 0x00060000)
#define SPER_APB1_GPIO1_BASE      (SPER_APB1_ADDR_BASE + 0x00070000)
#define SPER_APB1_GPIO2_BASE      (SPER_APB1_ADDR_BASE + 0x00080000)
#define SPER_APB1_CAN_BASE        (SPER_APB1_ADDR_BASE + 0x00090000)
#define SPER_APB1_SPI1_BASE       (SPER_APB1_ADDR_BASE + 0x000A0000)
#define SPER_APB1_PDB_BASE        (SPER_APB1_ADDR_BASE + 0x000B0000)

#define SPER_APB2_EPWM_TOP0_BASE  (SPER_APB2_ADDR_BASE + 0x00000000)
#define SPER_APB2_EPWM_TOP1_BASE  (SPER_APB2_ADDR_BASE + 0x00010000)
#define SPER_APB2_ECAP_BASE       (SPER_APB2_ADDR_BASE + 0x00020000)
#define SPER_APB2_EQEP_BASE       (SPER_APB2_ADDR_BASE + 0x00030000)
#define SPER_APB2_SAR_ADC_BASE    (SPER_APB2_ADDR_BASE + 0x00040000)
#define SPER_APB2_PRINT_BASE      (SPER_APB2_ADDR_BASE + 0x00050000)
#define SPER_APB2_TIMER_BASE      (SPER_APB2_ADDR_BASE + 0x00060000)
#define SPER_APB2_MCUWDT_BASE     (SPER_APB2_ADDR_BASE + 0x00070000)
#define SPER_APB2_RISCWDT_BASE    (SPER_APB2_ADDR_BASE + 0x00080000)
#define SPER_APB2_DSPWDT_BASE     (SPER_APB2_ADDR_BASE + 0x00090000)

// APER_ADDR_BASE
#define APER_APB_ADDR_BASE        (APER_ADDR_BASE + 0x00000000)
#define APER_IIR_ADDR_BASE        (APER_ADDR_BASE + 0x00100000)

// APER_APB_ADDR_BASE
#define APER_APB_SPDIF_I_BASE     (APER_APB_ADDR_BASE + 0x00000000)
#define APER_APB_SPDIF_O_BASE     (APER_APB_ADDR_BASE + 0x00010000)
#define APER_APB_I2S_I1_BASE      (APER_APB_ADDR_BASE + 0x00020000)
#define APER_APB_I2S_I2_BASE      (APER_APB_ADDR_BASE + 0x00030000)
#define APER_APB_I2S_I3_BASE      (APER_APB_ADDR_BASE + 0x00040000)
#define APER_APB_I2S_O1_BASE      (APER_APB_ADDR_BASE + 0x00050000)
#define APER_APB_I2S_O2_BASE      (APER_APB_ADDR_BASE + 0x00060000)
#define APER_APB_I2S_O3_BASE      (APER_APB_ADDR_BASE + 0x00070000)
#define APER_APB_I2S_DAC_BASE     (APER_APB_ADDR_BASE + 0x00080000)
#define APER_APB_I2S_PCM_BASE     (APER_APB_ADDR_BASE + 0x00090000)
#define APER_APB_APWM_BASE        (APER_APB_ADDR_BASE + 0x000A0000)
#define APER_APB_PDM_BASE         (APER_APB_ADDR_BASE + 0x000B0000)

// System Config
//#define MCFG_ADDR_BASE            (SCFG_ADDR_BASE + 0x00000000)
//#define MCUCFG_ADDR_BASE          (SCFG_ADDR_BASE + 0x00100000)
//#define DSPCFG_ADDR_BASE          (SCFG_ADDR_BASE + 0x00200000)
#define SCFG_BRG_ADDR_BASE          (SCFG_ADDR_BASE + 0x00000000)

//#define MCFG_FLASH0_ADDR_BASE     (MCFG_ADDR_BASE + 0x00000000)
//#define MCFG_FLASH1_ADDR_BASE     (MCFG_ADDR_BASE + 0x00010000)
//#define MCFG_SDRAM_ADDR_BASE      (MCFG_ADDR_BASE + 0x00020000)

#define SCFG_APB_BCFG_ADDR_BASE     (SCFG_BRG_ADDR_BASE + 0x00000000)
#define SCFG_APB_SYSCFG_ADDR_BASE   (SCFG_BRG_ADDR_BASE + 0x00010000)
#define SCFG_APB_CXC_ADDR_BASE      (SCFG_BRG_ADDR_BASE + 0x00020000)
#define SCFG_APB_INTR_ADDR_BASE     (SCFG_BRG_ADDR_BASE + 0x00030000)
#define SCFG_APB_CHIPCTRL_ADDR_BASE (SCFG_BRG_ADDR_BASE + 0x00040000)
#define SCFG_APB_DMAREQ_ADDR_BASE   (SCFG_BRG_ADDR_BASE + 0x00050000)
#define SCFG_APB_VLSP_ADDR_BASE     (SCFG_BRG_ADDR_BASE + 0x00060000)


// PCFG_ADDR_BASE
#define PCFG_APB_ADDR_BASE       (PCFG_ADDR_BASE + 0x00000000)
#define PCFG_USBHS_ADDR_BASE     (PCFG_ADDR_BASE + 0x00100000)
#define PCFG_USBFS_ADDR_BASE     (PCFG_ADDR_BASE + 0x00200000)
#define PCFG_ADMA_ADDR_BASE      (PCFG_ADDR_BASE + 0x00300000)
#define PCFG_SF1_ADDR_BASE      (PCFG_ADDR_BASE + 0x00400000)
#define PCFG_SF2_ADDR_BASE      (PCFG_ADDR_BASE + 0x00500000)
#define PCFG_MCU_ADDR_BASE      (PCFG_ADDR_BASE + 0x00600000)
#define PCFG_SDMA_ADDR_BASE     (PCFG_ADDR_BASE + 0x00700000)

#define PCFG_APB_SDMMC_BASE      (PCFG_APB_ADDR_BASE + 0x00000000)
#define PCFG_APB_SDIO_BASE       (PCFG_APB_ADDR_BASE + 0x00010000)
#define PCFG_APB_IIR_BASE        (PCFG_APB_ADDR_BASE + 0x00020000)
#define PCFG_APB_OTP_BASE        (PCFG_APB_ADDR_BASE + 0x00030000)

// MCU
#define MCU_DM_ADDR_BASE          (/*INST_ADDR_BASE +*/ 0x20000000)
#define MCU_SM_ADDR_BASE          (/*SREG_ADDR_BASE +*/ 0x00000000)

//DSP
//#define DSP_DM_ADDR_BASE          (INST_ADDR_BASE + 0x00000000)
//#define DSP_SM_ADDR_BASE          (SREG_ADDR_BASE + 0x00000000)

#endif
